Buscar

Casa do Código Capítulo 7. Integração entre Sistemas usando o VRaptor Alterando o link para a edição de livros Na listagem de livros estamos usando...

Casa do Código Capítulo 7. Integração entre Sistemas usando o VRaptor
Alterando o link para a edição de livros
Na listagem de livros estamos usando o seguinte link:
Modificar
Usando o recurso de uma maneira REST, estamos passando o ISBN diretamente na url, e não como parâmetro. Nesse caso, podemos passar parâmetros para o método do controller que serão usados na formação da url. Fazemos isso usando colchetes, ao invés de parênteses:
Modificar
Essa passagem de parâmetros só será efetiva se ele for usado diretamente na URL.
Resolvendo conflitos de rotas
Ao criar a rota do método edita, usamos @Get("/livros/{isbn}"). O problema é que a rota para o método formulário é, implicitamente, @Path("/livros/formulario"), que também casa com o padrão @Get("/livros/{isbn}"), com o ISBN valendo formulario. Isso, a princípio, vai gerar um 404, pois se o método formulário não tem nada anotado, a sua rota tem menos prioridade. Mas caso ele estivesse anotado com @Get("/livros/formulario"), receberíamos um erro: There are two rules that matches the uri '/livros/formulario' with method GET: [[FixedMethodStrategy: /livros/formulario LivrosController.formulario() [GET]], [FixedMethodStrategy: /livros/{isbn} LivrosController.edita(String) [GET]]] with same priority. Consider using @Path priority attribute. Ou seja, ele fala que o método formulario e o método edita conseguem tratar a uri /livros/formulario, com a mesma prioridade. Na última frase, ele dá a dica de usar o atributo priority da anotação @Path para resolver essa ambiguidade. Para isso, devemos mudar o método edita para: @Get @Path(value="/livros/{isbn}", priority=Path.LOWEST) public void edita(String isbn) {...} Assim, essa rota tem a menor prioridade, e a /livros/formulario será usada para o método formulario do controller. Caso o ISBN fosse um número, essa configuração não seria necessária: @Get("/livros/{isbn}") public void edita(Long isbn) {...} Nesse caso, como o VRaptor sabe que o ISBN é um número (Long), ele sabe que a última parte do caminho tem que conter apenas dígitos. Dessa forma, /livros/1234 cai no método edita, mas /livros/abcd dá 404 direto. 7.7 Usando REST no navegador Pensando em REST estamos facilitando a vida do cliente que vai consumir os serviços da nossa aplicação. Mas nem sempre esses clientes são outras aplicações. Quando uma pessoa acessa o sistema usando um navegador, ela é o cliente do sistema, usando o navegador como cliente HTTP. Por isso, podemos aplicar as ideias do REST à Web humana também, para implementarmos as interações com o usuário usando HTML e javascript. Uma limitação forte dos navegadores é que só conseguimos fazer requisições GET e POST nativamente. Isso significa que, se quisermos fazer um formulário para alterar um livro, não conseguimos fazer: Mas para simular o método PUT, o VRaptor (e alguns outros frameworks Web) suporta receber um parâmetro a mais na requisição indicando qual é o método real que queremos executar. No VRaptor, devemos deixar o formulário como POST e passar um parâmetro chamado _method com valor PUT:

Essa pergunta também está no material:

Vraptor - Desenvolvimento Agil para web com Java - Casa do Codigo
220 pág.

Português Escola Colegio Estadual Barao Do Rio BrancoEscola Colegio Estadual Barao Do Rio Branco

Ainda não temos respostas

Ainda não temos respostas aqui, seja o primeiro!

Tire dúvidas e ajude outros estudantes

Responda

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Mais conteúdos dessa disciplina